🔎SQL Server 無法連線?完整解決「Connection timed out」教學

SQL Server 無法連線?完整解決「Connection timed out」教學

在使用 TIBCO、Spotfire 或其他工具連接 SQL Server 時,很多人會遇到以下錯誤:

Could not establish contact with the database:
[tibcosoftwareinc][SQLServer JDBC Driver]
Error establishing socket to host and port: 220.133.47.3:1433.
Reason: Connection timed out: connect

這段訊息其實代表 資料庫連線逾時,意思是:電腦試著打開一個「通道」連到 SQL Server,但等不到回應,就像打電話卻沒人接聽。下面我會用「軟體工程師」的角度,帶你一步步找出問題。

為什麼會出現 Connection timed out?

最常見的原因有:

  • SQL Server 沒有啟用 TCP/IP 連線
  • 資料庫沒有在 1433 埠上監聽
  • 防火牆阻擋了 SQL 連線
  • 網路路由或 ISP 攔截封包
  • 資料庫在內網,外部沒有設定 Port Forward
  • 使用命名實例但連線字串錯誤

如何逐步檢查?

1. 測試本機是否能連上伺服器

在 Windows PowerShell 輸入:

Test-NetConnection 220.133.47.3 -Port 1433
  • 如果顯示 TcpTestSucceeded : True → 網路可達,問題可能在資料庫設定。
  • 如果顯示 False → 網路被擋或伺服器沒有開放。

2. 檢查 SQL Server 設定

  1. 打開 SQL Server Configuration Manager
  2. 確認 TCP/IP 協定有啟用
  3. 檢查 IPAll → TCP Port 是否為 1433
  4. 在伺服器命令列輸入:
    netstat -ano | findstr :1433
    確認有顯示 LISTENING

3. 防火牆與安全性設定

  • Windows 防火牆 → 建立「入站規則」,允許 TCP 1433
  • 雲端平台(Azure/AWS/GCP) → 開放 Security Group / NSG

4. 公網與內網環境

若 SQL Server 在公司內網,對外 IP 需要做 Port Forward,否則外部用戶無法連線。

5. 命名實例的狀況

如果使用命名實例,記得:

  • 固定一個 TCP 埠號(建議 1433)
  • 或啟用 SQL Browser(UDP 1434)

正確的 JDBC 連線字串範例

一般 SQL Server:

jdbc:tibcosoftwareinc:sqlserver://220.133.47.3:1433;
databaseName=YourDB;user=YourUser;password=YourPwd

Azure SQL:

jdbc:tibcosoftwareinc:sqlserver://yourserver.database.windows.net:1433;
databaseName=YourDB;encrypt=true;trustServerCertificate=false;
user=YourUser;password=YourPwd

常見問題與解決方案對照表

問題情境 解決方法
測試結果顯示連不通 確認防火牆 / ISP 是否封鎖
netstat 沒有 LISTENING SQL Server 沒開啟 TCP/IP
只能內網連,外網不行 檢查 NAT / Port Forward
使用命名實例卻 Timeout 設定固定 TCP 埠或啟用 SQL Browser
Azure SQL 開放 Client IP,並啟用加密連線

結論

遇到「Connection timed out」錯誤時,記住:

它代表伺服器沒回應,不是帳號密碼錯誤。

只要依照「網路 → SQL 設定 → 防火牆 → 連線字串」的順序檢查,就能一步步排除問題。

留言

這個網誌中的熱門文章

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題

🛠【實戰排除教學】從 VS Code 的 _logger 錯誤,到 PowerShell 找不到 npm/serve,再到 Oracle ORA-03135 連線中斷——一次搞懂!

🔎如何在 Oracle PL/SQL 儲存過程中為文字欄位加入換行符號(CHR(10))——以 Updlcmremark 為例